package com.springcloud.consumer02.service;

import com.alibaba.fastjson.JSONObject;
import com.springcloud.consumer02.config.FeignConfig;
import com.springcloud.consumer02.dto.UserInfo;
import com.springcloud.consumer02.service.impl.UserServiceImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * openfeign远程访问配置步骤：
 * 1.在pom.xml中添加openfeign依赖
 * 2.在启动类上添加@EnableFeignClients
 * 3.创建一个service接口，在接口上添加@Component注解
 * 4.在接口中创建远程调用的方法：GET、POST，要求：数据返回类型、方法的参数类型要和服务端的一致，否则调用会产生异常
 * 5.GET请求：
 * 在远程调用方法上添加GetMapping注解，指定远程访问服务的url路径
 * 在方法参数前添加@RequestParam，指定参数名称要和远程服务的参数名称一致，否则参数传递失败，并且@RequestParam不能省略
 * <p>
 * POST请求：
 * 在远程调用方法上添加@PostMapping注解，指定远程访问服务的url路径
 * 在方法参数前添加@RequestBody注解，该注解可以省略
 * <p>
 * 6.在service接口上添加@FeignClient注解，其中value参数表示指定要访问的远程服务名称
 */


@Component
@FeignClient(value = "productor", fallback = UserServiceImpl.class, configuration = FeignConfig.class)
public interface UserService {

    @GetMapping("/user/info")
    JSONObject getUserInfo(@RequestParam("username") String useranme);

    @PostMapping("/user/add")
    JSONObject addUserInfo(@RequestBody UserInfo userInfo);
}
